As used herein, a printer or printing device is a device that produces a hardcopy document from electronic data. Types of printers and printing devices include, but are not limited to, laser printers, inkjet printers, facsimile machines, digital copiers, multi-function peripherals, etc.
In laser printers, the print engine typically includes a scanning laser that is modulated in response to electronic data that represents the image being printed. The modulated laser beam is used to write a latent image in a field of charges on an imaging drum. The latent image on the drum is then developed by applying a charged toner that will adhere to, or is repelled from, the imaging drum in accordance with the charge pattern written to the drum by the laser. The toner image is then transferred from the imaging drum to a print medium, such as paper.
Before image data can be used to modulate the laser of a print engine, the data must be appropriately formatted. This formatting is also referred to in the art as “rasterizing” or “rendering” the data. In such printing systems, image data rasterizing can either be performed on the host computer submitting the print job to the printing device, with large volumes of rasterized image data being shipped to the printer at high speed, or on a formatter within the printing device itself.
In printing devices that employ a laser print engine, the rasterized image data must be provided at a speed fast enough to keep up with the printing action as measured by the rate at which the laser writes data to the imaging drum or the rate of movement of the paper or other print medium past the imaging drum. Since a conventional laser print engine operates at a constant speed, if rasterized image data is not available to the print engine when a previous segment of image data has been used, a “print overrun” or printing error occurs and printing stops.
Consequently, the formatter that formats or rasterizes the image data for use by the print engine “races” the output task that modulates the laser of the print engine to write the desired image onto the imaging drum. This is commonly termed “racing the laser.”
Several methods have been developed to avoid print overruns. In one such method, all the data for each page of the print job is rasterized before the printing of that page starts. In other words, a full raster bit map of an entire page is generated and stored or received in the printer before the printing of that page begins so that the print engine is assured of always having rasterized data waiting while the page is printed. A pause between pages, if necessary, does not cause a print overrun. This solution requires relatively large amounts of random access memory (RAM) in the printer to store the full raster bit map for each page in succession.
A second method for assuring the availability of rasterized image data involves identifying portions of the image to be printed that are relatively difficult to rasterize due to the amount of image data at those portions of the image. Once identified, these portions may be formatted or rasterized in advance.
In this method, a page description is received from a host computer and converted into a series of simple commands, called display commands. The collection of display commands is known as a display list. The display commands describe objects to be printed. The display commands are parsed and sorted according to their vertical position on the page. The page is then logically divided into sections called image strips or bands. The image strips are then individually rasterized, i.e., the described objects in each successive strip are rendered into a raster bit map that is passed to the print engine for printing.
This procedure enables lesser amounts of RAM to be used for rasterization and allows for faster printing. When the display commands are rasterized at a fast enough pace, the same memory used to store a first strip can then be reused for a subsequent strip further down the page. For example, in certain printers it is known to employ three buffers for storing image strips. During page processing, the first buffer is reused for a fourth strip on the page after the printing of a first strip; the second buffer is reused for a fifth strip, and so on.
However, there may be little time available between the use of rasterized data in a buffer for printing one strip and the need to finish storing rasterized data in the same buffer for a subsequent strip. “Complex” strips include a relatively large number of display commands and may require a longer than average time for rasterization. Additionally, to rasterize a strip (whether complex or not), more memory space may be required than is available depending upon several factors associated with the printer, including memory size, memory fragmentation, and other printer system activities that are then occurring.
In the case of a complex strip, rasterization time may increase to such an extent that the succeeding strip cannot be delivered to the print engine on time, thus causing a print overrun to occur. Accordingly, complex strips may be identified in advance and pre-rasterized, i.e., fully rasterized before the printing of a previous strip begins, to ensure that the race with the laser will not be lost and result in a print overrun.
In general, these methods of racing the laser require a difficult trade off between the amount of printer memory required and real-time processing resources. While it is possible to avoid print overruns by entirely pre-rasterizing every image strip or each complete page, complete pre-rasterization consumes significant memory resources which greatly impacts the cost of the printer. Alternatively, if rasterization is performed on a strip-by-strip basis, with complex strips being identified and pre-rasterized, significant memory and processing resources will still have to be provided.